自己做个bench stop
需求背景:
有些场景下, 我们长期运行bench start ,但是关机后却没有kill掉 bench start的进程。
这样子导致bench start的进程就在后台hang住运行。 这种情况下我经常只能重启一下机器。 但是重启机器太麻烦了。
所以用gpt写了个脚本, 保留 22,3306,80 端口。 其他的端口进程全部kill。
更新:
2024-05-17 更新
后来发现没法再次执行bench start的原因是系统里头的 redis, python 进程依然在运行导致的。 可以通过如下的命令关闭一下即可。
frappe@899c031ceb4f:~/frappe-bench$ sudo pkill python redis
frappe@899c031ceb4f:~/frappe-bench$ netstat -lantp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:37866 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 464 192.168.32.2:22 192.168.8.135:50694 ESTABLISHED -
tcp6 0 0 :::22 :::* LISTEN -
做法:
#!/bin/bash
# 确保要保留的端口
keep_ports=(22 80 3306)
# 获取所有已监听的端口
all_ports=$(netstat -lnt | awk 'NR>2 {split($4, a, ":"); print a[2]}')
# 终止不需要的端口对应的进程
for port in $all_ports; do
found=0
for keep_port in ${keep_ports[@]}; do
if [ "$port" -eq "$keep_port" ]; then
found=1
break
fi
done
if [ $found -eq 0 ]; then
echo "Terminating processes on port $port"
fuser -k -n tcp $port
fi
done
echo "Processes terminated."
执行:
frappe@e8811978c502:/home/test$ sudo bash ./kill.bench.start.sh
Terminating processes on port 42630
42630/tcp: 879
Terminating processes on port 46025
46025/tcp: 440
Terminating processes on port 40145
Terminating processes on port 4341
4341/tcp: 56186 56187 56188 56189 56190 56191 56192 56193 56194
Terminating processes on port 4342
Terminating processes on port 4343
Terminating processes on port 4344
Terminating processes on port 8000
8000/tcp: 108489
Terminating processes on port 4321
Processes terminated.